home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / program / gfxstf13.lha / CybSrc.s < prev    next >
Text File  |  1995-12-18  |  19KB  |  809 lines

  1. _LVOOpenLibrary EQU -552
  2. _LVOCloseLibrary EQU -414
  3. _LVOAllocMem EQU -198
  4. _LVOFreeMem EQU -210
  5. grd_Buffers EQU $80000001
  6. grd_Width   EQU $80000002
  7. grd_Height  EQU $80000003
  8. grd_Depth   EQU $80000004
  9. grd_PixelLayout EQU $80000005
  10. grd_ColorSpace EQU $80000006
  11.  
  12. grd_PLANAR     EQU 0
  13. grd_PLANARI    EQU 1
  14. grd_CHUNKY     EQU 2
  15. grd_HICOL15    EQU 3
  16. grd_HICOL16    EQU 4
  17. grd_TRUECOL24  EQU 5
  18. grd_TRUECOL24P EQU 6
  19. grd_TRUECOL32  EQU 7
  20. grd_GRAFFITI   EQU 8
  21. grd_TRUECOL32B EQU 9
  22.  
  23. grd_Palette    EQU 0
  24. grd_RGB        EQU 1
  25. grd_BGR        EQU 2
  26. grd_RGBPC      EQU 3
  27. grd_BGRPC      EQU 4
  28.  
  29. ;    ;  0  TrueColor  LONG   RGB   %00000000 rrrrrrrr gggggggg bbbbbbbb   grd_TRUECOL32B + grd_RGB
  30. ;    ;  1  TrueColor 3 BYTE  RGB   %rrrrrrrr gggggggg bbbbbbbb            grd_TRUECOL24 + grd_RGB
  31. ;    ;  2  TrueColor  WORD   RGB   %rrrrrggg gggbbbbb                     grd_HICOL16 + grd_RGB
  32. ;    ;  3  TrueColor  WORD   RGB   %0rrrrrgg gggbbbbb                     grd_HICOL15 + grd_RGB
  33. ;    ;  4  TrueColor  LONG   BGR   %00000000 bbbbbbbb gggggggg rrrrrrrr   grd_TRUECOL32B + grd_BGR
  34. ;    ;  5  TrueColor 3 BYTE  BGR   %bbbbbbbb gggggggg rrrrrrrr            grd_TRUECOL24 + grd_BGR
  35. ;    ;  6  TrueColor  WORD   BGR   %bbbbbggg gggrrrrr                     grd_HICOL16 + grd_BGR
  36. ;    ;  7  TrueColor  WORD   BGR   %0bbbbbgg gggrrrrr                     grd_HICOL15 + grd_BGR
  37. ;    ;  8  TrueColor  LONG   RGB   %rrrrrrrr gggggggg bbbbbbbb 00000000   grd_TRUECOL32 + grd_RGB
  38. ;    ;  9  ColorMap   BYTE   -     -                                      grd_CHUNKY + grd_Palette
  39. ;    ; 10  Graffiti   BYTE   -     - (Graffiti style chunky, very special)grd_GRAFFITI + grd_Palette
  40. ;    ; 11  TrueColor  WORD   RGB   %gggbbbbb 0rrrrrgg                     grd_HICOL15 + grd_RGBPC
  41. ;    ; 12  TrueColor  WORD   BGR   %gggrrrrr 0bbbbbgg                     grd_HICOL15 + grd_BGRPC
  42. ;    ; 13  TrueColor  WORD   RGB   %gggbbbbb rrrrrggg                     grd_HICOL16 + grd_BGR
  43. ;    ; 14  TrueColor 3 BYTE  BGR   %bbbbbbbb gggggggg rrrrrrrr            grd_TRUECOL24 + grd_BGR
  44. ;    ; 15  TrueColor  LONG   BGR   %bbbbbbbb gggggggg rrrrrrrr 00000000   grd_TRUECOL32 + grd_BGR
  45. ;    ; 16  TrueColor  LONG   RGB   %rrrrrrrr gggggggg bbbbbbbb 00000000   grd_TRUECOL32 + grd_RGB
  46. ;    ; 17  TrueColor  WORD   BGR   %gggrrrrr bbbbbggg                     grd_HICOL16 + grd_BGRPC
  47.  
  48.  
  49. CALLSYS MACRO
  50.       jsr _LVO\1(a6)
  51.      ENDM
  52.  
  53. XLIB MACRO
  54.         XREF _LVO\1
  55.         ENDM
  56.  
  57. OpenLibs:
  58.         movem.l a0-a6/d0-d7,-(sp)
  59.         move.l $4,a6
  60.         move.l #0,CGXBase
  61.         lea     CyberName,a1
  62.         moveq   #40,d0
  63.         jsr     -552(a6)
  64.         move.l  d0,CGXBase(a5)
  65.         beq.s   .Error
  66.         move.l #-1,d6
  67. .Next   Move.l  d6,d0
  68.         move.l a6,-(sp)
  69.         move.l GfxBase(a5),a6
  70.         Jsr     -732(a6)
  71.         move.l (sp)+,a6
  72.         Move.l  d0,d6
  73.         move.l a6,-(sp)
  74.         move.l CGXBase(a5),a6
  75.         move.l d6,d0
  76.         jsr -54(a6)
  77.         move.l (sp)+,a6
  78.         cmp.l #0,d0
  79.         bne .CyberFound
  80.         Cmp.l   #-1,d6
  81.         Beq     .Error
  82.         bra .Next
  83. .CyberFound
  84.         Move.l  a5,d0
  85.         Bra.s   .Ok
  86. .Error  movem.l (sp)+,a0-a6/d0-d7
  87.         Moveq   #0,d0
  88.         rts
  89. .Ok     Movem.l (sp)+,a0-a6/d0-d7
  90.         moveq #1,d0
  91.         Rts
  92. CyberName: dc.b 'cybergraphics.library',0
  93.         even
  94. CGXBase: dc.l 0
  95.  
  96. SwitchScreens:
  97.         movem.l d2-d7/a4-a6,-(sp)
  98.         move.l IntBase,a6
  99.         move.l rsCGX_ActiveMap(a0),d1
  100.         move.l d0,rsCGX_ActiveMap(a0)
  101.         sub.l d7,d7
  102.         move.w rsCGX_Height(a0),d7
  103.         move.l rsCGX_MyScreen(a0),a0
  104.         cmp.l #0,d1
  105.         beq .BufOne
  106.         cmp.l #1,d1
  107.         beq .BufTwo
  108.         cmp.l #2,d1
  109.         beq .BufThree
  110.         bra .Exit
  111. .BufOne:
  112.         sub.l d1,d1
  113.         cmp.l #0,d0
  114.         beq .Exit
  115.         cmp.l #1,d0
  116.         beq .ZO
  117.         cmp.l #2,d0
  118.         beq .ZT
  119.         bra .Exit
  120. .BufTwo:
  121.         sub.l d1,d1
  122.         cmp.l #0,d0
  123.         beq .OZ
  124.         cmp.l #1,d0
  125.         beq .Exit
  126.         cmp.l #2,d0
  127.         beq .OT
  128.         bra .Exit
  129. .BufThree:
  130.         sub.l d1,d1
  131.         cmp.l #0,d0
  132.         beq .TZ
  133.         cmp.l #1,d0
  134.         beq .TO
  135.         cmp.l #2,d0
  136.         beq .Exit
  137.         bra .Exit
  138. .ZO:
  139.         sub.l d6,d6
  140.         sub.w d7,d6
  141.         move.w d6,d1
  142.         bra .Swap
  143. .ZT:
  144.         sub.l d6,d6
  145.         sub.l d5,d5
  146.         move.w d7,d5
  147.         add.w d7,d5
  148.         sub.w d5,d6
  149.         move.w d6,d1
  150.         bra .Swap
  151. .OZ:
  152.         move.w d7,d1
  153.         bra .Swap
  154. .OT:
  155.         sub.l d6,d6
  156.         sub.w d7,d6
  157.         move.w d6,d1
  158.         bra  .Swap
  159. .TZ:
  160.         move.w d7,d1
  161.         add.w d7,d1
  162.         bra .Swap
  163. .TO:
  164.         move.w d7,d1
  165. .Swap:
  166.         sub.l d0,d0
  167.         move.w #0,d0
  168.         jsr -162(a6)
  169.  
  170. .Exit:
  171.         movem.l (sp)+,d2-d7/a4-a6
  172.         rts
  173.  
  174. STRUCTURE RtgScreenCGX,0
  175.   APTR   rsCGX_MyScreen  ; An Intuition Screen
  176.   ULONG  rsCGX_ActiveMap ; Number of active buffer
  177.   APTR   rsCGX_MapA ; Video Mem Adress of Buffer 0 (at front at the beginning...)
  178.   APTR   rsCGX_MapB ; The same for buffer 1
  179.   APTR   rsCGX_MapC ; The same for buffer 2
  180.   APTR   rsCGX_FrontMap ; The address of the Buffer in front...
  181.   ULONG  rsCGX_Bytes ; How many bytes one pixel fills (2 for 16 Bit for example)
  182.   ULONG  rsCGX_Width ; The Width (Caution! Longword!)
  183.   UWORD  rsCGX_Height; The Height (Caution! Now word... sorry for that :) )
  184.   ULONG  rsCGX_NumBuf ; Number of buffers of that screen...
  185.   UWORD  rsCGX_Locks ; The Rtg Locks...
  186.   APTR   rsCGX_ModeID ; The ModeID of this screen ...
  187.   ULONG  rsCGX_RealMapA ; The graphics.library Bitmap structure (modified by Cyber to support Chunky)
  188.   STRUCT rsCGX_Tags,16 ; Some place for OpenRtgScreen to put something there :)
  189. LABEL rsCGX_SIZEOF
  190.  
  191. STRUCTURE ScreenQuery,0
  192.  ULONG sq_ModeID ; ModeID of the to be used Screenmode
  193.  ULONG sq_Width      ; The Width
  194.  ULONG sq_Height     ; The Height
  195.  UWORD sq_Depth      ; The color depth
  196.  ULONG sq_Buffers    ; How many Buffers...
  197. LABEL sq_SIZEOF
  198.  
  199. OpenRtgScreen:
  200.         movem.l d3-d7/a2-a6,-(sp)
  201.         cmp.l #0,CGXBase
  202.         beq .Exit
  203.         move.l a2,a4
  204.         move.w sq_Width(a2),-(sp)
  205.         move.w sq_Height(a2),-(sp)
  206.         move.l a2,a4
  207.         move.l a3,a0
  208.         move.l sq_Buffers(a2),d4
  209.         move.l #3,d0
  210.         cmp.l d0,d4
  211.         bgt .Error1
  212. .BufferDone:
  213.         move.l #rsCGX_SIZEOF,d0
  214.         move.l #MEMF_CLEAR,d1
  215.         move.l $4,a6
  216.         CALLSYS AllocMem
  217.         cmp.l #0,d0
  218.         beq .Error1
  219.         move.l d0,a3
  220.         move.l #136,d0
  221.         move.l #MEMF_CLEAR,d1
  222.         CALLSYS AllocMem
  223.         cmp.l #0,d0
  224.         beq .Error2
  225.         move.l d0,d7
  226.         move.l d0,a0
  227.         move.l #SA_Left,(a0)+
  228.         move.l #0,(a0)+
  229.         move.l #SA_Top,(a0)+
  230.         move.l #0,(a0)+
  231.         move.l #SA_Height,(a0)+
  232.         clr.l d0
  233.         move.w (sp)+,d0
  234.         clr.l d5
  235.         move.w d0,d5
  236.         move.l d0,d1
  237.         cmp.l #1,d4
  238.         beq .OneBuffer
  239.         cmp.l #2,d4
  240.         beq .TwoBuffer
  241.         cmp.l #3,d4
  242.         beq .ThreeBuffer
  243.         bra .Error3
  244. .ThreeBuffer:
  245.         add.l d1,d0
  246.         add.l d1,d5
  247.         add.l d1,d5
  248.         add.l d1,d0
  249. .TwoBuffer:
  250.         add.l d1,d0
  251.         add.l d1,d5
  252. .OneBuffer:
  253.         move.l d0,(a0)+
  254.         move.l #SA_Width,(a0)+
  255.         clr.l d0
  256.         move.w (sp)+,d0
  257.         clr.l d3
  258.         move.w d0,d3
  259.         move.l d3,(a0)+
  260.         clr.l d0
  261.         move.w sq_Depth(a4),d0
  262.         move.l #SA_Depth,(a0)+
  263.         move.l d0,(a0)+
  264.         move.l #SA_Title,(a0)+
  265.         move.l #0,(a0)+
  266.         move.l #SA_DisplayID,(a0)+
  267.         move.l sq_ModeID(a4),a1
  268.         move.l a1,(a0)+
  269.  
  270.         ; No Autoscroll for CyberGraphX,
  271.         ; so the user can't watch the
  272.         ; DBuffering Buffers...
  273.         ; No overscan, too...
  274.         ; And no interleaved...
  275.         ; Draggable HAS to be enabled...
  276.         ; as it is per default...
  277.  
  278.         move.l #SA_Quiet,(a0)+
  279.         move.l #1,(a0)+
  280.         move.l #SA_DClip,(a0)+
  281.         move.l d7,a2
  282.         add.l #128,a2
  283.         move.l a2,a1
  284.         move.w #0,(a1)+
  285.         move.w #0,(a1)+
  286.         move.w #640,(a1)+
  287.         move.w #480,(a1)+
  288.         move.l a2,(a0)+
  289.         move.l #TAG_END,(a0)+
  290.         move.l #0,(a0)+
  291.         move.l d7,a1
  292.         move.l #0,a0
  293.         move.l IntBase,a6
  294.         jsr -612(a6) ; OpenScreenTagList
  295.         cmp.l #0,d0
  296.         beq .Error3
  297.         move.l d7,a1
  298.         move.l d0,rsCGX_MyScreen(a3)
  299.         move.l #136,d0
  300.         move.l $4,a6
  301.         CALLSYS FreeMem
  302.         move.l #0,rsCGX_ActiveMap(a3)
  303.         move.l rsCGX_MyScreen(a3),a0
  304.         clr.l d0
  305.         move.w sc_Width(a0),d0
  306.         ext.l d0
  307.         move.l d0,rsCGX_Width(a3)
  308.         move.w d5,rsCGX_Height(a3)
  309.         move.l d4,rsCGX_NumBuf(a3)
  310.         move.w #0,rsCGX_Locks(a3)
  311.         move.l rsCGX_MyScreen(a3),a0
  312.         lea sc_RastPort(a0),a0
  313.         move.l rp_BitMap(a0),a0
  314.         move.l a0,rsCGX_RealMapA(a3)
  315.         move.l sq_ModeID(a4),d1
  316.         move.l d1,rsCGX_ModeID(a3)
  317.         move.l #CYBRIDATTR_PIXFMT,d0
  318.         move.l CGXBase,a6
  319.         jsr -102(a6) ; GetCyberIDAttr
  320.         cmp.l #0,d0
  321.         beq .OneByte
  322.         cmp.l #9,d0
  323.         blt .TwoBytes
  324.         cmp.l #11,d0
  325.         blt .ThreeBytes
  326.         cmp.l #10,d0
  327.         bgt .FourBytes
  328.         bra .Error4 ; Unknown Pixelformat
  329. .OneByte:
  330.         move.l #1,rsCGX_Bytes(a3)
  331.         bra .GetMap
  332. .TwoBytes:
  333.         move.l #2,rsCGX_Bytes(a3)
  334.         bra .GetMap
  335. .ThreeBytes:
  336.         move.l #3,rsCGX_Bytes(a3)
  337.         bra .GetMap
  338. .FourBytes:
  339.         move.l #4,rsCGX_Bytes(a3)
  340. .GetMap:
  341.         move.l #0,rsCGX_MapB(a3)
  342.         move.l #0,rsCGX_MapC(a3)
  343.  
  344.         ;move.l rsCGX_RealMapA(a3),a0
  345.         ;lea rsCGX_Tags(a3),a1
  346.         ;move.l a1,a2
  347.         ;move.l #LBMI_BASEADDRESS,(a2)+
  348.         ;move.l #0,(a2)+
  349.         ;move.l #0,(a2)+
  350.         ;move.l #0,(a2)
  351.         ;move.l a6,-(sp)
  352.         ;move.l CGXBase,a6
  353.         ;jsr -168(a6) ; LockBitMapTagList
  354.         ;move.l d0,a0
  355.         ;cmp.l #0,d0
  356.         ;beq .Error4
  357.         ;lea rsCGX_Tags(a3),a1
  358.         ;move.l 4(a1),d0
  359.         ;move.l d0,rsCGX_MapA(a3)
  360.         ;move.l d0,d7
  361.         ;jsr -174(a6) ; UnLockBitmap
  362.         ;move.l (sp)+,a6
  363.  
  364.         lea Hook,a0
  365.         move.l rsCGX_MyScreen(a3),a1
  366.         lea sc_RastPort(a1),a1
  367.         move.l #0,a2
  368.         move.l a6,-(sp)
  369.         move.l CGXBase,a6
  370.         jsr -156(a6) ; DoCDrawMethodTagList
  371.         move.l (sp)+,a6
  372.         move.l d7,rsCGX_MapA(a3)
  373.  
  374.         move.l d7,rsCGX_FrontMap(a3)
  375.         cmp.l #1,d4
  376.         beq .OnlyOne
  377.         move.l rsCGX_Width(a3),d0
  378.         clr.l d1
  379.         move.w rsCGX_Height(a3),d1
  380.         cmp.l #2,d4
  381.         beq .Zwoo
  382.         divu #3,d1
  383.         bra .Go
  384. .Zwoo:
  385.         divu #2,d1
  386. .Go:
  387.         move.w d1,rsCGX_Height(a3)
  388.         mulu d1,d0
  389.         add.l d0,d7
  390.         move.l d7,rsCGX_MapB(a3)
  391.         cmp.l #2,d4
  392.         beq .OnlyOne
  393.         move.l rsCGX_Width(a3),d0
  394.         mulu d1,d0
  395.         add.l d0,d7
  396.         move.l d7,rsCGX_MapC(a3)
  397. .OnlyOne:
  398.         move.l a3,d0
  399.         clr.l d1
  400.         clr.l d2
  401.         move.w rsCGX_Height(a3),d1
  402.         move.l d1,d2
  403.         move.l #0,rsCGX_OffA(a3)
  404.         move.l d1,rsCGX_OffB(a3)
  405.         add.l d2,d1
  406.         cmp.l #2,d4
  407.         beq .SaveMap2
  408.         move.l d1,rsCGX_OffC(a3)
  409. .SaveMap2:
  410.         movem.l (sp)+,d3-d7/a2-a6
  411.         rts
  412. .Exit:
  413.         move.l #0,d0
  414.         movem.l (sp)+,d3-d7/a2-a6
  415.         rts
  416. .Error1:
  417.         tst.l (sp)+
  418. .Raus:
  419.         movem.l (sp)+,d3-d7/a2-a6
  420.         move.l #0,d0
  421.         rts
  422. .Error2:
  423.         move.l $4,a6
  424.         move.l a3,a1
  425.         move.l #rsCGX_SIZEOF,d0
  426.         CALLSYS FreeMem
  427.         bra .Error1
  428. .Error3:
  429.         move.l $4,a6
  430.         move.l d7,a1
  431.         move.l #136,d0
  432.         CALLSYS FreeMem
  433.         bra .Error2
  434. .Error4:
  435.         move.l rsCGX_MyScreen(a3),a0
  436.         move.l IntBase,a6
  437.         jsr -66(a6)
  438.         bra .Error2
  439. Hook:
  440.         dc.l 0,0,HookFunc,0,0
  441. HookFunc:
  442.         movem.l d0-d6,-(sp)
  443.         move.l (a1),d7 ; Address
  444.         move.l 4(a1),d1 ; X-Offset
  445.         move.l 8(a1),d2 ; Y-Offset
  446.         clr.l d3
  447.         clr.l d4
  448.         move.w 20(a1),d3 ; BytesPerRow
  449.         move.w 22(a1),d4 ; BytesPerPixel
  450.         clr.l d6
  451.         mulu d4,d1
  452.         add.l d1,d6
  453.         mulu d2,d3
  454.         add.l d3,d6
  455.         ror.l #2,d6
  456.         add.l d6,d7
  457.         movem.l (sp)+,d0-d6
  458.         rts
  459.  
  460. GetRtgScreenData:
  461.     Move.l  a0,a2
  462.     Move.l  a1,a3
  463.     Move.l  rsCGX_MyScreen(a2),a4
  464.     move.l  a6,a5
  465.     Move.l  UtilityBase,a6
  466.     Move.l  #grd_Width,d0
  467.     Move.l  a3,a0
  468.     Jsr     -30(a6) Utility - FindTagItem
  469.     Tst.l   d0
  470.     Beq.s   .NoWidth
  471.     move.l d0,a1
  472.     move.l rsCGX_RealMapA(a4),a0
  473.     move.l #CYBRMATTR_WIDTH,d1
  474.     move.l CGXBase,a6
  475.     move.l a1,-(sp)
  476.     jsr -96(a6); GetCyberMapAttr
  477.     move.l (sp)+,a1
  478.     move.l UtilityBase,a6
  479.     move.l d0,ti_Data(a1)
  480. .NoWidth
  481.     Move.l  #grd_Height,d0
  482.     Move.l  a3,a0
  483.     Jsr     -30(a6) Utility - FindTagItem
  484.     Tst.l   d0
  485.     Beq.s   .NoHeight
  486.     move.l d0,a1
  487.     move.l rsCGX_RealMapA(a4),a0
  488.     move.l #CYBRMATTR_HEIGHT,d1
  489.     move.l CGXBase,a6
  490.     move.l a1,-(sp)
  491.     jsr -96(a6); GetCyberMapAttr
  492.     move.l (sp)+,a1
  493.     move.l UtilityBase,a6
  494.     move.l d0,ti_Data(a1)
  495. .NoHeight
  496.     Move.l  #grd_PixelLayout,d0
  497.     Move.l  a3,a0
  498.     Jsr     -30(a6) Utility - FindTagItem
  499.     Tst.l   d0
  500.     Beq   .NoPixelLayout
  501.     move.l d0,a1
  502.     move.l rsCGX_RealMapA(a4),a0
  503.     move.l #CYBRMATTR_PIXFMT,d1
  504.     move.l CGXBase,a6
  505.     move.l a1,-(sp)
  506.     jsr -96(a6) ; GetCyberMapAttr
  507.     move.l (sp)+,a1
  508.     move.l UtilityBase,a6
  509.     cmp.l #0,d0
  510.     beq .FmtChunky
  511.     cmp.l #5,d0
  512.     blt .FmtHi15
  513.     cmp.l #9,d0
  514.     blt .FmtHi16
  515.     cmp.l #11,d0
  516.     blt .FmtTrue24
  517.     cmp.l #11,d0
  518.     beq .FmtTrue32B
  519.     cmp.l #12,d0
  520.     beq .FmtTrue32
  521.     cmp.l #13,d0
  522.     beq .FmtTrue32
  523.     bra .NoPixelLayout ; Unsupported Pixellayout
  524. .FmtChunky:
  525.     move.l #grd_CHUNKY,d0
  526.     bra .ValueReturn
  527. .FmtHi15:
  528.     move.l #grd_HICOL15,d0
  529.     bra .ValueReturn
  530. .FmtHi16:
  531.     move.l #grd_HICOL16,d0
  532.     bra .ValueReturn
  533. .FmtTrue24:
  534.     move.l #grd_TRUECOL24,d0
  535.     bra .ValueReturn
  536. .FmtTrue32:
  537.     move.l #grd_TRUECOL32,d0
  538.     bra .ValueReturn
  539. .FmtTrue32B:
  540.     move.l #grd_TRUECOL32B,d0
  541.     bra .ValueReturn
  542. .ValueReturn:
  543.     move.l d0,ti_Data(a1)
  544. .NoPixelLayout
  545.     Move.l  #grd_ColorSpace,d0
  546.     Move.l  a3,a0
  547.     Jsr     -30(a6) Utility - FindTagItem
  548.     Tst.l   d0
  549.     Beq   .NoColorSpace
  550.     move.l d0,a1
  551.     move.l rsCGX_RealMapA(a4),a0
  552.     move.l #CYBRMATTR_PIXFMT,d1
  553.     move.l CGXBase,a6
  554.     move.l a1,-(sp)
  555.     jsr -96(a6) ; GetCyberMapAttr
  556.     move.l (sp)+,a1
  557.     move.l UtilityBase,a6
  558.     cmp.l #0,d0
  559.     beq .FmtPalette
  560.     cmp.l #1,d0
  561.     beq .FmtRGB
  562.     cmp.l #5,d0
  563.     beq .FmtRGB
  564.     cmp.l #9,d0
  565.     beq .FmtRGB
  566.     cmp.l #11,d0
  567.     beq .FmtRGB
  568.     cmp.l #2,d0
  569.     beq .FmtBGR
  570.     cmp.l #6,d0
  571.     beq .FmtBGR
  572.     cmp.l #10,d0
  573.     beq .FmtBGR
  574.     cmp.l #12,d0
  575.     beq .FmtBGR
  576.     cmp.l #3,d0
  577.     beq .FmtRGBPC
  578.     cmp.l #7,d0
  579.     beq .FmtRGBPC
  580.     cmp.l #4,d0
  581.     beq .FmtBGRPC
  582.     cmp.l #8,d0
  583.     beq .FmtBGRPC
  584.     cmp.l #13,d0
  585.     beq .FmtRGB
  586.     bra .NoColorSpace ; Unknown Format
  587. .FmtPalette
  588.     move.l #grd_Palette,d0
  589.     bra .ReturnValue
  590. .FmtRGB
  591.     move.l #grd_RGB,d0
  592.     bra .ReturnValue
  593. .FmtBGR
  594.     move.l #grd_BGR,d0
  595.     bra .ReturnValue
  596. .FmtRGBPC
  597.     move.l #grd_RGBPC,d0
  598.     bra .ReturnValue
  599. .FmtBGRPC
  600.     move.l #grd_BGRPC,d0
  601.     bra .ReturnValue
  602. .ReturnValue
  603.     move.l d0,ti_Data(a1)
  604. .NoColorSpace
  605.     Move.l  #grd_Depth,d0
  606.     Move.l  a3,a0
  607.     Jsr     -30(a6) Utility - FindTagItem
  608.     Tst.l   d0
  609.     Beq.s   .NoDepth
  610.     move.l d0,a1
  611.     move.l rsCGX_RealMapA(a4),a0
  612.     move.l #CYBRMATTR_DEPTH,d1
  613.     move.l CGXBase,a6
  614.     move.l a1,-(sp)
  615.     jsr -96(a6); GetCyberMapAttr
  616.     move.l (sp)+,a1
  617.     move.l UtilityBase,a6
  618.     move.l d0,ti_Data(a1)
  619. .NoDepth
  620.     Move.l  #grd_Buffers,d0
  621.     Move.l  a3,a0
  622.     Jsr     -30(a6) Utility - FindTagItem
  623.     Tst.l   d0
  624.     Beq.s   .NoBuffers
  625.     move.l d0,a1
  626.     move.l rsCGX_NumBuf(a4),d0
  627.     move.l d0,ti_Data(a1)
  628. .NoBuffers
  629.     Movem.l (sp)+,a2-a5/a6
  630.     rts
  631.  
  632. BlitRtg:
  633.     movem.l d6-d7/a3/a6,-(sp)
  634.     move.l a0,a3
  635.     move.l rsCGX_RealMapA(a0),a1
  636.     move.l #0,a2
  637.     cmp.l #0,d6
  638.     beq .Weiter
  639.     cmp.l #1,d6
  640.     beq .Buffer1Src
  641.     bra .Buffer2Src
  642. .Buffer1Src:
  643.     movem.l d4/d5,-(sp)
  644.     move.l rsCGX_Width(a3),d4
  645.     clr.l d4
  646.     clr.l d5
  647.     move.w rsCGX_Height(a3),d5
  648.     mulu d5,d4
  649.     add.l d4,d1
  650.     movem.l (sp)+,d4/d5
  651.     bra .Weiter
  652. .Buffer2Src:
  653.     movem.l d4/d5,-(sp)
  654.     move.l rsCGX_Width(a3),d4
  655.     clr.l d4
  656.     clr.l d5
  657.     move.w rsCGX_Height(a3),d5
  658.     mulu d5,d4
  659.     add.l d4,d1
  660.     add.l d4,d1
  661.     movem.l (sp)+,d4/d5
  662. .Weiter:
  663.     clr.l d6
  664.     cmp.l #0,d7
  665.     beq .WeiterD
  666.     cmp.l #1,d7
  667.     beq .Buffer1Dest
  668.     bra .Buffer2Dest
  669. .Buffer1Dest:
  670.     movem.l d4/d5,-(sp)
  671.     move.l rsCGX_Width(a3),d4
  672.     clr.l d4
  673.     clr.l d5
  674.     move.w rsCGX_Height(a3),d5
  675.     mulu d5,d4
  676.     add.l d4,d3
  677.     movem.l (sp)+,d4/d5
  678.     bra .WeiterD
  679. .Buffer2Dest:
  680.     movem.l d4/d5,-(sp)
  681.     move.l rsCGX_Width(a3),d4
  682.     clr.l d4
  683.     clr.l d5
  684.     move.w rsCGX_Height(a3),d5
  685.     mulu d5,d4
  686.     add.l d4,d3
  687.     add.l d4,d3
  688.     movem.l (sp)+,d4/d5
  689. .WeiterD:
  690.     clr.l d7
  691.     move.b #$C0,d6
  692.     move.b #$FF,d7
  693.     move.l GfxBase,a6
  694.     jsr -30(a6) ; BltBitMap
  695.     jsr -228(a6) ; WaitBlit
  696.     movem.l (sp)+,d6-d7/a3/a6
  697.     rts
  698.  
  699. STRUCTURE CyberModeNode,0
  700.  STRUCT  cmn_Node,LN_SIZE
  701.  STRUCT  cmn_ModeText,DISPLAYNAMELEN ; Screenmodename
  702.  ULONG   cmn_DisplayID ; ModeID
  703.  UWORD   cmn_Width ; Width
  704.  UWORD   cmn_Height ; Height
  705.  UWORD   cmn_Depth ; Depth
  706.  APTR    cmn_DisplayTagList ; Ignore this at the moment
  707. LABEL   cmn_SIZEOF
  708.  
  709. CloseRtgScreen:
  710.       movem.l a6,-(sp)
  711.       move.l IntBase,a6
  712.       move.l rsCGX_MyScreen(a0),d0
  713.       beq .ScreenClosed
  714.       move.l d0,a0
  715.       jsr -66(a6)
  716. .ScreenClosed:
  717.       movem.l (sp)+,a6
  718.       rts
  719.  
  720. ScreenAtFront:
  721.     Move.l  IntBase,a1
  722.     Move.l  60(a1),d0
  723.     Cmp.l   rsCGX_MyScreen(a0),d0
  724.     Beq.s   .AtFront
  725.     Moveq   #0,d0
  726.     Rts
  727. .AtFront
  728.     Moveq   #-1,d0
  729.     Rts
  730.  
  731. CloseLibs:
  732.       cmp.l #0,CGXBase
  733.       beq .Exit
  734.       move.l $4,a6
  735.       move.l CGXBase,a1
  736.       CALLSYS CloseLibrary
  737. .Exit:
  738.       move.l #0,d0
  739.       rts
  740.  
  741. LockRtgScreen:
  742.       add.w #1,rsCGX_Locks(a0)
  743.       move.l rsCGX_MapA(a0),d0
  744.       rts
  745.  
  746. UnlockRtgScreen:
  747.  
  748.     clr.l d0
  749.     move.w rsCGX_Locks(a0),d0
  750.     cmp.w #0,d0
  751.     beq .Exit
  752.     subq.w #1,rsCGX_Locks(a0)
  753. .Exit
  754.     rts
  755.  
  756. LoadRGBRtg:
  757.  
  758.         Movem.l d2-d5/a2-a3/a6,-(sp)
  759.  
  760.         Move.l  GfxBase(a6),a6
  761.         Move.l  rsCGX_MyScreen(a0),a2
  762.         Lea     44(a2),a2
  763.         Move.l  a1,a3
  764. .Loop2  Move.w  (a3)+,d4
  765.         Beq.s   .Exit
  766.         Move.w  (a3)+,d5
  767.         Bra.s   .Wend
  768.  
  769. .Loop   Move.l  a2,a0
  770.         Move.w  d5,d0
  771.         Addq.w  #1,d5
  772.         Move.l  (a3)+,d1
  773.         Move.l  (a3)+,d2
  774.         Move.l  (a3)+,d3
  775.         Jsr     -852(a6)        Graphics - SetRGB32
  776. .Wend   Dbra    d4,.Loop
  777.         Bra.s   .Loop2
  778. .Exit   Movem.l (sp)+,d2-d5/a2-a3/a6
  779.         Rts
  780.  
  781. GetScreenmodes:
  782.     move.l a6,-(sp)
  783.     move.l CGXBase,a6
  784.     lea tags,a1
  785.     jsr -72(a1) ; AllocCModeListTagList
  786.     move.l (sp)+,a6
  787.     rts
  788. tags:
  789.     dc.l CYBRMREQ_MinWidth,MinWidth
  790.     dc.l CYBRMREQ_MaxWidth,MaxWidth
  791.     dc.l CYBRMREQ_MinHeight,MinHeight
  792.     dc.l CYBRMREQ_MaxHeight,MaxHeight
  793.     dc.l CYBRMREQ_MinDepth,MinDepth
  794.     dc.l CYBRMREQ_MaxDepth,MaxDepth
  795.  
  796.  
  797. FreeScreenmodes:
  798.  move.l a6,-(sp)
  799.  move.l CGXBase,a6
  800.  move.l Modes,a0
  801.  jsr -78(a6) ; FreeCModeList
  802.  move.l (sp)+,a6
  803.  rts
  804.  
  805. GetBufAdr:
  806.         Lsl.w   #2,d0
  807.         Move.l  rsCGX_MapA(a0,d0.w),d0
  808.         Rts
  809.